package com.alibaba.excel.write.metadata;

import com.alibaba.excel.support.ExcelTypeEnum;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;

/**
 * 工作簿（就是一个 Excel 文件）
 **/
@Getter
@Setter
@EqualsAndHashCode
public class WriteWorkbook extends WriteBasicParameter {

    /**
     * Excel 类型，默认为 xlsx
     */
    private ExcelTypeEnum excelType;

    /**
     * 最终输出文件
     * <p>
     * 如果 'outputStream' 和 'file' 都不是空的，文件优先
     */
    private File file;

    /**
     * 最终输出的流
     * <p>
     * 如果 'outputStream' 和 'file' 都不是空的，文件优先
     */
    private OutputStream outputStream;

    /**
     * 字符集。
     * 仅适用于 CSV 文件
     */
    private Charset charset;

    /**
     * 模板输入流
     * <p>
     * 如果 'inputStream' 和 'file' 都不是空的，文件优先
     */
    private InputStream templateInputStream;

    /**
     * 模板文件
     * <p>
     * 如果 'inputStream' 和 'file' 都不是空的，文件优先
     */
    private File templateFile;

    /**
     * 是否自动关闭流：默认为 true.
     */
    private Boolean autoCloseStream;

    /**
     * 是否强制使用'inputStream'。默认为假
     */
    private Boolean mandatoryUseInputStream;

    /**
     * 是否加密
     * <p>
     * 警告：加密是将整个文件读入内存，因此非常占用内存。
     *
     */
    private String password;

    /**
     * 是否在内存中写 excel。默认 false，
     * 我们使用的方式是创建缓存文件，最后写入excel。
     * <p>
     * Comment 和 RichTextString 仅在内存模式下受支持。
     */
    private Boolean inMemory;

    /**
     * 是否在异常情况下编写 Excel。默认为 false。
     */
    private Boolean writeExcelOnException;
}
